package LeetCode热题HOT100;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class p448找到所有数组中消失的数字 {
    public List<Integer> findDisappearedNumbers(int[] nums) {
        //使用 boolean数组，对已出现元素对应的下标值设为 ture,
        //遍历 boolean数组，元素值为默认值false，即该下标的值就是消失的数字
        boolean[] hasNum=new boolean[nums.length+1];

        for (int num:nums) {
            hasNum[num]=true;
        }
        List<Integer> res=new ArrayList<>();
        for (int i = 1; i <hasNum.length; i++) {
            if (!hasNum[i]) {
                res.add(i);
            }
        }
        return res;

    }
    public List<Integer> findDisappearedNumbers2(int[] nums) {
        //由于元素是1-n的，所以通过 num[i]-1 找到nums数组中元素对应的下标
        //创建新数组 nums2,根据 找到nums数组中元素对应的下标，在nums2的对应下标将元素置为1
        //遍历 nums2数组，如果元素！=1，则下标+1就是消失的数字

        int[] nums2=new int[nums.length];
        for (int i = 0; i <nums.length; i++) {
            nums2[nums[i]-1]=1;
        }

        List<Integer> res=new ArrayList<>();
        for (int i = 0; i <nums.length; i++) {
            if (nums2[i]!=1) {
                res.add(i+1);
            }
        }
        return res;

    }

    public List<Integer> findDisappearedNumbers1(int[] nums) {
        //使用HashSet 暴力求解
        Set<Integer> set=new HashSet<>();
        for (int num:nums) {
            set.add(num);
        }

        List<Integer> res=new ArrayList<>();
        for (int i = 0; i <nums.length; i++) {
            if (!set.contains(i+1)) {
                //如果 set中没有i+1这个数，那么就是数组中消失的数
                res.add(i+1);
            }
        }
        return res;
    }

    public static void main(String[] args) {
        Set<Integer> res=new HashSet<>();
        res.add(1);
        res.add(1);
        System.out.println(res);
    }
}
